utils: replace DMABUF heap with memfd Memfd does not require access to a device and is simpler to use overall. Also allows us to remove a dependency.
diff --git a/Cargo.lock b/Cargo.lock index dbae6e7..9936996 100644 --- a/Cargo.lock +++ b/Cargo.lock
@@ -263,24 +263,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" dependencies = [ - "nix 0.28.0", + "nix", "windows-sys", ] [[package]] -name = "dma-heap" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317d6cf25b1d189b359d1ac497b2ba8c607354f1f04a9fc52b6e0c570ef13048" -dependencies = [ - "log", - "nix 0.27.1", - "strum", - "strum_macros", - "thiserror", -] - -[[package]] name = "either" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -476,17 +463,6 @@ [[package]] name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" @@ -604,12 +580,6 @@ ] [[package]] -name = "rustversion" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" - -[[package]] name = "ryu" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -665,25 +635,6 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.61", -] - -[[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -778,8 +729,8 @@ version = "0.0.1" dependencies = [ "anyhow", - "dma-heap", "log", + "nix", "thiserror", "v4l2r", ] @@ -795,7 +746,7 @@ "enumn", "env_logger", "log", - "nix 0.28.0", + "nix", "thiserror", "utils", ] @@ -809,7 +760,7 @@ "cbindgen", "env_logger", "log", - "nix 0.28.0", + "nix", "v4l2r", ]
diff --git a/utils/Cargo.toml b/utils/Cargo.toml index 894c0a3..6ed0379 100644 --- a/utils/Cargo.toml +++ b/utils/Cargo.toml
@@ -11,4 +11,4 @@ thiserror = "1.0" anyhow = "1.0" log = "0.4.14" -dma-heap = "0.2.1" +nix = { version = "0.28", features = ["fs"] }
diff --git a/utils/src/dmabuf_exporter.rs b/utils/src/dmabuf_exporter.rs index bd77f9b..ce19e9b 100644 --- a/utils/src/dmabuf_exporter.rs +++ b/utils/src/dmabuf_exporter.rs
@@ -1,21 +1,24 @@ use std::fs::File; -use dma_heap::{Heap, HeapKind}; +use nix::{ + sys::memfd::{memfd_create, MemFdCreateFlag}, + unistd::ftruncate, +}; use v4l2r::{memory::DmaBufHandle, Format}; use anyhow::Result; pub fn export_dmabufs(format: &Format, nb_buffers: usize) -> Result<Vec<Vec<DmaBufHandle<File>>>> { - let heap = Heap::new(HeapKind::System)?; - let fds: Vec<Vec<DmaBufHandle<File>>> = (0..nb_buffers) .map(|_| { format .plane_fmt .iter() .map(|plane| { - let fd = File::from(heap.allocate(plane.sizeimage as usize).unwrap()); - DmaBufHandle::from(fd) + memfd_create(c"memfd buffer", MemFdCreateFlag::MFD_ALLOW_SEALING) + .and_then(|fd| ftruncate(&fd, i64::from(plane.sizeimage)).map(|_| fd)) + .map(|fd| DmaBufHandle::from(File::from(fd))) + .unwrap() }) .collect() })